@dxos/react-ui-editor 0.8.2-main.f11618f → 0.8.2-staging.7ac8446
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +371 -499
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +379 -515
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +371 -499
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/{stories/InputMode.stories.d.ts → InputMode.stories.d.ts} +1 -1
- package/dist/types/src/InputMode.stories.d.ts.map +1 -0
- package/dist/types/src/{stories/TextEditorBasic.stories.d.ts → TextEditor.stories.d.ts} +35 -2
- package/dist/types/src/TextEditor.stories.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/util.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/{view-mode.d.ts → viewMode.d.ts} +1 -1
- package/dist/types/src/components/EditorToolbar/viewMode.d.ts.map +1 -0
- package/dist/types/src/defaults.d.ts +0 -1
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/command/command.d.ts +10 -5
- package/dist/types/src/extensions/command/command.d.ts.map +1 -1
- package/dist/types/src/extensions/command/hint.d.ts +2 -4
- package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
- package/dist/types/src/extensions/command/index.d.ts +0 -1
- package/dist/types/src/extensions/command/index.d.ts.map +1 -1
- package/dist/types/src/extensions/command/menu.d.ts +2 -7
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/command/preview.d.ts +12 -0
- package/dist/types/src/extensions/command/preview.d.ts.map +1 -0
- package/dist/types/src/extensions/command/state.d.ts +11 -9
- package/dist/types/src/extensions/command/state.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +7 -9
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +0 -1
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts +1 -4
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +2 -2
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/link.d.ts +1 -4
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
- package/dist/types/src/fragments.d.ts +3 -0
- package/dist/types/src/fragments.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextEditor.d.ts +1 -2
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +0 -5
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/react.d.ts +1 -6
- package/dist/types/src/util/react.d.ts.map +1 -1
- package/package.json +27 -33
- package/src/{stories/InputMode.stories.tsx → InputMode.stories.tsx} +4 -4
- package/src/TextEditor.stories.tsx +856 -0
- package/src/components/EditorToolbar/EditorToolbar.tsx +2 -2
- package/src/components/EditorToolbar/util.ts +3 -3
- package/src/defaults.ts +3 -5
- package/src/extensions/automerge/automerge.stories.tsx +11 -3
- package/src/extensions/command/command.ts +27 -9
- package/src/extensions/command/hint.ts +30 -33
- package/src/extensions/command/index.ts +0 -1
- package/src/extensions/command/menu.ts +8 -11
- package/src/extensions/command/preview.ts +79 -0
- package/src/extensions/command/state.ts +61 -41
- package/src/extensions/comments.ts +9 -9
- package/src/extensions/folding.tsx +1 -1
- package/src/extensions/index.ts +0 -1
- package/src/extensions/markdown/decorate.ts +3 -4
- package/src/extensions/markdown/formatting.ts +2 -2
- package/src/extensions/markdown/image.ts +11 -12
- package/src/extensions/markdown/link.ts +24 -33
- package/src/fragments.ts +19 -0
- package/src/hooks/useTextEditor.ts +3 -4
- package/src/types.ts +0 -7
- package/src/util/react.tsx +2 -20
- package/dist/lib/browser/testing/index.mjs +0 -67
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node/testing/index.cjs +0 -101
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/lib/node-esm/testing/index.mjs +0 -69
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +0 -1
- package/dist/types/src/extensions/command/action.d.ts +0 -17
- package/dist/types/src/extensions/command/action.d.ts.map +0 -1
- package/dist/types/src/extensions/preview/index.d.ts +0 -2
- package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
- package/dist/types/src/extensions/preview/preview.d.ts +0 -39
- package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
- package/dist/types/src/stories/InputMode.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorBasic.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorComments.stories.d.ts +0 -13
- package/dist/types/src/stories/TextEditorComments.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorPreview.stories.d.ts +0 -13
- package/dist/types/src/stories/TextEditorPreview.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorSpecial.stories.d.ts +0 -19
- package/dist/types/src/stories/TextEditorSpecial.stories.d.ts.map +0 -1
- package/dist/types/src/stories/story-utils.d.ts +0 -53
- package/dist/types/src/stories/story-utils.d.ts.map +0 -1
- package/dist/types/src/testing/RefPopover.d.ts +0 -21
- package/dist/types/src/testing/RefPopover.d.ts.map +0 -1
- package/dist/types/src/testing/index.d.ts +0 -2
- package/dist/types/src/testing/index.d.ts.map +0 -1
- package/src/extensions/command/action.ts +0 -49
- package/src/extensions/preview/index.ts +0 -5
- package/src/extensions/preview/preview.ts +0 -271
- package/src/stories/TextEditorBasic.stories.tsx +0 -289
- package/src/stories/TextEditorComments.stories.tsx +0 -99
- package/src/stories/TextEditorPreview.stories.tsx +0 -239
- package/src/stories/TextEditorSpecial.stories.tsx +0 -107
- package/src/stories/story-utils.tsx +0 -329
- package/src/testing/RefPopover.tsx +0 -74
- package/src/testing/index.ts +0 -5
- /package/src/components/EditorToolbar/{view-mode.ts → viewMode.ts} +0 -0
@@ -47,10 +47,10 @@ import { textBlockWidth } from "@dxos/react-ui-theme";
|
|
47
47
|
|
48
48
|
// packages/ui/react-ui-editor/src/components/EditorToolbar/util.ts
|
49
49
|
import { useMemo } from "react";
|
50
|
-
import {
|
50
|
+
import { create } from "@dxos/live-object";
|
51
51
|
import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
|
52
52
|
var useEditorToolbarState = (initialState = {}) => {
|
53
|
-
return useMemo(() =>
|
53
|
+
return useMemo(() => create(initialState), []);
|
54
54
|
};
|
55
55
|
var createEditorAction = (payload, icon, label = [
|
56
56
|
`${payload.type} label`,
|
@@ -266,7 +266,7 @@ var createLists = (state) => {
|
|
266
266
|
};
|
267
267
|
};
|
268
268
|
|
269
|
-
// packages/ui/react-ui-editor/src/components/EditorToolbar/
|
269
|
+
// packages/ui/react-ui-editor/src/components/EditorToolbar/viewMode.ts
|
270
270
|
var createViewModeGroupAction = (value) => createEditorActionGroup("viewMode", {
|
271
271
|
variant: "dropdownMenu",
|
272
272
|
applyActive: true,
|
@@ -311,12 +311,99 @@ var createViewMode = (state) => {
|
|
311
311
|
};
|
312
312
|
};
|
313
313
|
|
314
|
+
// packages/ui/react-ui-editor/src/fragments.ts
|
315
|
+
import { mx } from "@dxos/react-ui-theme";
|
316
|
+
var stackItemContentToolbarClassNames = (role) => mx("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
317
|
+
|
318
|
+
// packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
|
319
|
+
var createToolbar = ({ state, customActions, ...features }) => {
|
320
|
+
const nodes = [];
|
321
|
+
const edges = [];
|
322
|
+
if (features.headings ?? true) {
|
323
|
+
const headings2 = createHeadings(state);
|
324
|
+
nodes.push(...headings2.nodes);
|
325
|
+
edges.push(...headings2.edges);
|
326
|
+
}
|
327
|
+
if (features.formatting ?? true) {
|
328
|
+
const formatting = createFormatting(state);
|
329
|
+
nodes.push(...formatting.nodes);
|
330
|
+
edges.push(...formatting.edges);
|
331
|
+
}
|
332
|
+
if (features.lists ?? true) {
|
333
|
+
const lists = createLists(state);
|
334
|
+
nodes.push(...lists.nodes);
|
335
|
+
edges.push(...lists.edges);
|
336
|
+
}
|
337
|
+
if (features.blocks ?? true) {
|
338
|
+
const blocks = createBlocks(state);
|
339
|
+
nodes.push(...blocks.nodes);
|
340
|
+
edges.push(...blocks.edges);
|
341
|
+
}
|
342
|
+
if (customActions) {
|
343
|
+
const custom = customActions();
|
344
|
+
nodes.push(...custom.nodes);
|
345
|
+
edges.push(...custom.edges);
|
346
|
+
}
|
347
|
+
const editorToolbarGap = createGapSeparator();
|
348
|
+
nodes.push(...editorToolbarGap.nodes);
|
349
|
+
edges.push(...editorToolbarGap.edges);
|
350
|
+
if (features.comment ?? true) {
|
351
|
+
const comment = createComment(state);
|
352
|
+
nodes.push(...comment.nodes);
|
353
|
+
edges.push(...comment.edges);
|
354
|
+
}
|
355
|
+
if (features.search ?? true) {
|
356
|
+
nodes.push(editorToolbarSearch);
|
357
|
+
edges.push({
|
358
|
+
source: "root",
|
359
|
+
target: editorToolbarSearch.id
|
360
|
+
});
|
361
|
+
}
|
362
|
+
if (features.viewMode ?? true) {
|
363
|
+
const viewMode = createViewMode(state);
|
364
|
+
nodes.push(...viewMode.nodes);
|
365
|
+
edges.push(...viewMode.edges);
|
366
|
+
}
|
367
|
+
return {
|
368
|
+
nodes,
|
369
|
+
edges
|
370
|
+
};
|
371
|
+
};
|
372
|
+
var useEditorToolbarActionGraph = ({ onAction, ...props }) => {
|
373
|
+
const menuCreator = useCallback(() => createToolbar(props), [
|
374
|
+
props
|
375
|
+
]);
|
376
|
+
const { resolveGroupItems } = useMenuActions(menuCreator);
|
377
|
+
return {
|
378
|
+
resolveGroupItems,
|
379
|
+
onAction
|
380
|
+
};
|
381
|
+
};
|
382
|
+
var EditorToolbar = ({ classNames, attendableId, role, ...props }) => {
|
383
|
+
const menuProps = useEditorToolbarActionGraph(props);
|
384
|
+
return /* @__PURE__ */ React.createElement("div", {
|
385
|
+
role: "none",
|
386
|
+
className: stackItemContentToolbarClassNames(role)
|
387
|
+
}, /* @__PURE__ */ React.createElement(ElevationProvider, {
|
388
|
+
elevation: role === "section" ? "positioned" : "base"
|
389
|
+
}, /* @__PURE__ */ React.createElement(MenuProvider, {
|
390
|
+
...menuProps,
|
391
|
+
attendableId
|
392
|
+
}, /* @__PURE__ */ React.createElement(ToolbarMenu, {
|
393
|
+
classNames: [
|
394
|
+
textBlockWidth,
|
395
|
+
"!bg-transparent",
|
396
|
+
classNames
|
397
|
+
]
|
398
|
+
}))));
|
399
|
+
};
|
400
|
+
|
314
401
|
// packages/ui/react-ui-editor/src/defaults.ts
|
315
402
|
import { EditorView } from "@codemirror/view";
|
316
|
-
import { mx as
|
403
|
+
import { mx as mx3 } from "@dxos/react-ui-theme";
|
317
404
|
|
318
405
|
// packages/ui/react-ui-editor/src/styles/markdown.ts
|
319
|
-
import { mx } from "@dxos/react-ui-theme";
|
406
|
+
import { mx as mx2 } from "@dxos/react-ui-theme";
|
320
407
|
var headings = {
|
321
408
|
1: "text-4xl",
|
322
409
|
2: "text-3xl",
|
@@ -330,7 +417,7 @@ var theme = {
|
|
330
417
|
codeMark: "font-mono text-primary-500",
|
331
418
|
mark: "opacity-50",
|
332
419
|
heading: (level) => {
|
333
|
-
return
|
420
|
+
return mx2(headings[level], "dark:text-primary-400");
|
334
421
|
}
|
335
422
|
};
|
336
423
|
|
@@ -549,9 +636,8 @@ var defaultTheme = {
|
|
549
636
|
|
550
637
|
// packages/ui/react-ui-editor/src/defaults.ts
|
551
638
|
var margin = "!mt-[1rem]";
|
552
|
-
var
|
553
|
-
var
|
554
|
-
var editorFullWidth = mx2(margin);
|
639
|
+
var editorContent = mx3(margin, "!mli-auto w-full max-w-[min(50rem,100%-4rem)]");
|
640
|
+
var editorFullWidth = mx3(margin);
|
555
641
|
var editorGutter = EditorView.theme({
|
556
642
|
// Match margin from content.
|
557
643
|
// Gutter = 2rem + 1rem margin.
|
@@ -566,91 +652,8 @@ var editorMonospace = EditorView.theme({
|
|
566
652
|
}
|
567
653
|
});
|
568
654
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
569
|
-
var stackItemContentEditorClassNames = (role) =>
|
570
|
-
var
|
571
|
-
|
572
|
-
// packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
|
573
|
-
var createToolbar = ({ state, customActions, ...features }) => {
|
574
|
-
const nodes = [];
|
575
|
-
const edges = [];
|
576
|
-
if (features.headings ?? true) {
|
577
|
-
const headings2 = createHeadings(state);
|
578
|
-
nodes.push(...headings2.nodes);
|
579
|
-
edges.push(...headings2.edges);
|
580
|
-
}
|
581
|
-
if (features.formatting ?? true) {
|
582
|
-
const formatting = createFormatting(state);
|
583
|
-
nodes.push(...formatting.nodes);
|
584
|
-
edges.push(...formatting.edges);
|
585
|
-
}
|
586
|
-
if (features.lists ?? true) {
|
587
|
-
const lists = createLists(state);
|
588
|
-
nodes.push(...lists.nodes);
|
589
|
-
edges.push(...lists.edges);
|
590
|
-
}
|
591
|
-
if (features.blocks ?? true) {
|
592
|
-
const blocks = createBlocks(state);
|
593
|
-
nodes.push(...blocks.nodes);
|
594
|
-
edges.push(...blocks.edges);
|
595
|
-
}
|
596
|
-
if (customActions) {
|
597
|
-
const custom = customActions();
|
598
|
-
nodes.push(...custom.nodes);
|
599
|
-
edges.push(...custom.edges);
|
600
|
-
}
|
601
|
-
const editorToolbarGap = createGapSeparator();
|
602
|
-
nodes.push(...editorToolbarGap.nodes);
|
603
|
-
edges.push(...editorToolbarGap.edges);
|
604
|
-
if (features.comment ?? true) {
|
605
|
-
const comment = createComment(state);
|
606
|
-
nodes.push(...comment.nodes);
|
607
|
-
edges.push(...comment.edges);
|
608
|
-
}
|
609
|
-
if (features.search ?? true) {
|
610
|
-
nodes.push(editorToolbarSearch);
|
611
|
-
edges.push({
|
612
|
-
source: "root",
|
613
|
-
target: editorToolbarSearch.id
|
614
|
-
});
|
615
|
-
}
|
616
|
-
if (features.viewMode ?? true) {
|
617
|
-
const viewMode = createViewMode(state);
|
618
|
-
nodes.push(...viewMode.nodes);
|
619
|
-
edges.push(...viewMode.edges);
|
620
|
-
}
|
621
|
-
return {
|
622
|
-
nodes,
|
623
|
-
edges
|
624
|
-
};
|
625
|
-
};
|
626
|
-
var useEditorToolbarActionGraph = ({ onAction, ...props }) => {
|
627
|
-
const menuCreator = useCallback(() => createToolbar(props), [
|
628
|
-
props
|
629
|
-
]);
|
630
|
-
const { resolveGroupItems } = useMenuActions(menuCreator);
|
631
|
-
return {
|
632
|
-
resolveGroupItems,
|
633
|
-
onAction
|
634
|
-
};
|
635
|
-
};
|
636
|
-
var EditorToolbar = ({ classNames, attendableId, role, ...props }) => {
|
637
|
-
const menuProps = useEditorToolbarActionGraph(props);
|
638
|
-
return /* @__PURE__ */ React.createElement("div", {
|
639
|
-
role: "none",
|
640
|
-
className: stackItemContentToolbarClassNames(role)
|
641
|
-
}, /* @__PURE__ */ React.createElement(ElevationProvider, {
|
642
|
-
elevation: role === "section" ? "positioned" : "base"
|
643
|
-
}, /* @__PURE__ */ React.createElement(MenuProvider, {
|
644
|
-
...menuProps,
|
645
|
-
attendableId
|
646
|
-
}, /* @__PURE__ */ React.createElement(ToolbarMenu, {
|
647
|
-
classNames: [
|
648
|
-
textBlockWidth,
|
649
|
-
"!bg-transparent",
|
650
|
-
classNames
|
651
|
-
]
|
652
|
-
}))));
|
653
|
-
};
|
655
|
+
var stackItemContentEditorClassNames = (role) => mx3("attention-surface dx-focus-ring-inset data-[toolbar=disabled]:pbs-2", role === "section" ? "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24" : "min-bs-0");
|
656
|
+
var stackItemContentToolbarClassNames2 = (role) => mx3("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
654
657
|
|
655
658
|
// packages/ui/react-ui-editor/src/extensions/annotations.ts
|
656
659
|
import { StateField } from "@codemirror/state";
|
@@ -791,7 +794,7 @@ var clientRectsFor = (dom) => {
|
|
791
794
|
// packages/ui/react-ui-editor/src/util/react.tsx
|
792
795
|
import React2 from "react";
|
793
796
|
import { createRoot } from "react-dom/client";
|
794
|
-
import { ThemeProvider
|
797
|
+
import { ThemeProvider } from "@dxos/react-ui";
|
795
798
|
import { defaultTx } from "@dxos/react-ui-theme";
|
796
799
|
var createElement = (tag, options, children) => {
|
797
800
|
const el = document.createElement(tag);
|
@@ -811,11 +814,6 @@ var renderRoot = (root, node) => {
|
|
811
814
|
}, node));
|
812
815
|
return root;
|
813
816
|
};
|
814
|
-
var createRenderer = (Component) => (el, props) => {
|
815
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement(ThemeProvider, {
|
816
|
-
tx: defaultTx
|
817
|
-
}, /* @__PURE__ */ React2.createElement(Tooltip.Provider, null, /* @__PURE__ */ React2.createElement(Component, props))));
|
818
|
-
};
|
819
817
|
|
820
818
|
// packages/ui/react-ui-editor/src/extensions/annotations.ts
|
821
819
|
var annotationMark = Decoration.mark({
|
@@ -1859,11 +1857,15 @@ var random = (min, max) => {
|
|
1859
1857
|
return min + ~~(Math.random() * (max - min + 1));
|
1860
1858
|
};
|
1861
1859
|
|
1862
|
-
// packages/ui/react-ui-editor/src/extensions/command/
|
1863
|
-
import {
|
1860
|
+
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
1861
|
+
import { EditorView as EditorView8, keymap as keymap3 } from "@codemirror/view";
|
1862
|
+
|
1863
|
+
// packages/ui/react-ui-editor/src/extensions/command/hint.ts
|
1864
|
+
import { RangeSetBuilder } from "@codemirror/state";
|
1865
|
+
import { Decoration as Decoration3, EditorView as EditorView6, ViewPlugin as ViewPlugin3, WidgetType as WidgetType2 } from "@codemirror/view";
|
1864
1866
|
|
1865
1867
|
// packages/ui/react-ui-editor/src/extensions/command/state.ts
|
1866
|
-
import { StateField as StateField3 } from "@codemirror/state";
|
1868
|
+
import { StateEffect as StateEffect2, StateField as StateField3 } from "@codemirror/state";
|
1867
1869
|
import { showTooltip } from "@codemirror/view";
|
1868
1870
|
var commandConfig = singleValueFacet();
|
1869
1871
|
var commandState = StateField3.define({
|
@@ -1873,8 +1875,8 @@ var commandState = StateField3.define({
|
|
1873
1875
|
if (effect.is(closeEffect)) {
|
1874
1876
|
return {};
|
1875
1877
|
}
|
1876
|
-
|
1877
|
-
|
1878
|
+
if (effect.is(openEffect)) {
|
1879
|
+
const options = tr.state.facet(commandConfig);
|
1878
1880
|
const { pos, fullWidth } = effect.value;
|
1879
1881
|
const tooltip = {
|
1880
1882
|
pos,
|
@@ -1882,39 +1884,34 @@ var commandState = StateField3.define({
|
|
1882
1884
|
arrow: false,
|
1883
1885
|
strictSide: true,
|
1884
1886
|
create: (view) => {
|
1885
|
-
const
|
1887
|
+
const dom = document.createElement("div");
|
1886
1888
|
const tooltipView = {
|
1887
|
-
dom
|
1889
|
+
dom,
|
1888
1890
|
mount: (view2) => {
|
1889
1891
|
if (fullWidth) {
|
1890
|
-
const parent =
|
1892
|
+
const parent = dom.parentElement;
|
1891
1893
|
const { paddingLeft, paddingRight } = window.getComputedStyle(parent);
|
1892
1894
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
1893
|
-
|
1895
|
+
dom.style.width = `${widthWithoutPadding}px`;
|
1894
1896
|
}
|
1895
|
-
|
1896
|
-
|
1897
|
+
options.onRenderDialog(dom, (action) => {
|
1898
|
+
view2.dispatch({
|
1899
|
+
effects: closeEffect.of(null)
|
1900
|
+
});
|
1901
|
+
if (action?.insert?.length) {
|
1902
|
+
const text = action.insert + "\n";
|
1897
1903
|
view2.dispatch({
|
1898
|
-
|
1899
|
-
|
1900
|
-
|
1901
|
-
|
1902
|
-
|
1903
|
-
|
1904
|
-
changes: {
|
1905
|
-
from: pos,
|
1906
|
-
insert: text
|
1907
|
-
},
|
1908
|
-
selection: {
|
1909
|
-
anchor: pos + text.length
|
1910
|
-
}
|
1911
|
-
});
|
1912
|
-
break;
|
1904
|
+
changes: {
|
1905
|
+
from: pos,
|
1906
|
+
insert: text
|
1907
|
+
},
|
1908
|
+
selection: {
|
1909
|
+
anchor: pos + text.length
|
1913
1910
|
}
|
1914
|
-
}
|
1915
|
-
requestAnimationFrame(() => view2.focus());
|
1911
|
+
});
|
1916
1912
|
}
|
1917
|
-
|
1913
|
+
requestAnimationFrame(() => view2.focus());
|
1914
|
+
});
|
1918
1915
|
}
|
1919
1916
|
};
|
1920
1917
|
return tooltipView;
|
@@ -1931,8 +1928,6 @@ var commandState = StateField3.define({
|
|
1931
1928
|
showTooltip.from(field, (value) => value.tooltip ?? null)
|
1932
1929
|
]
|
1933
1930
|
});
|
1934
|
-
|
1935
|
-
// packages/ui/react-ui-editor/src/extensions/command/action.ts
|
1936
1931
|
var openEffect = StateEffect2.define();
|
1937
1932
|
var closeEffect = StateEffect2.define();
|
1938
1933
|
var openCommand = (view) => {
|
@@ -1971,38 +1966,7 @@ var commandKeyBindings = [
|
|
1971
1966
|
}
|
1972
1967
|
];
|
1973
1968
|
|
1974
|
-
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
1975
|
-
import { EditorView as EditorView7, keymap as keymap3 } from "@codemirror/view";
|
1976
|
-
|
1977
1969
|
// packages/ui/react-ui-editor/src/extensions/command/hint.ts
|
1978
|
-
import { RangeSetBuilder } from "@codemirror/state";
|
1979
|
-
import { Decoration as Decoration3, EditorView as EditorView6, ViewPlugin as ViewPlugin3, WidgetType as WidgetType2 } from "@codemirror/view";
|
1980
|
-
var hintViewPlugin = ({ onHint }) => ViewPlugin3.fromClass(class {
|
1981
|
-
constructor() {
|
1982
|
-
this.deco = Decoration3.none;
|
1983
|
-
}
|
1984
|
-
update(update2) {
|
1985
|
-
const builder = new RangeSetBuilder();
|
1986
|
-
const cState = update2.view.state.field(commandState, false);
|
1987
|
-
if (!cState?.tooltip) {
|
1988
|
-
const selection = update2.view.state.selection.main;
|
1989
|
-
const line = update2.view.state.doc.lineAt(selection.from);
|
1990
|
-
if (selection.from === selection.to && line.from === line.to) {
|
1991
|
-
const hint = onHint();
|
1992
|
-
if (hint) {
|
1993
|
-
builder.add(selection.from, selection.to, Decoration3.widget({
|
1994
|
-
widget: new CommandHint(hint)
|
1995
|
-
}));
|
1996
|
-
}
|
1997
|
-
}
|
1998
|
-
}
|
1999
|
-
this.deco = builder.finish();
|
2000
|
-
}
|
2001
|
-
}, {
|
2002
|
-
provide: (plugin) => [
|
2003
|
-
EditorView6.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration3.none)
|
2004
|
-
]
|
2005
|
-
});
|
2006
1970
|
var CommandHint = class extends WidgetType2 {
|
2007
1971
|
constructor(content) {
|
2008
1972
|
super();
|
@@ -2042,6 +2006,32 @@ var CommandHint = class extends WidgetType2 {
|
|
2042
2006
|
return false;
|
2043
2007
|
}
|
2044
2008
|
};
|
2009
|
+
var hintViewPlugin = ({ onHint }) => ViewPlugin3.fromClass(class {
|
2010
|
+
constructor() {
|
2011
|
+
this.deco = Decoration3.none;
|
2012
|
+
}
|
2013
|
+
update(update2) {
|
2014
|
+
const builder = new RangeSetBuilder();
|
2015
|
+
const cState = update2.view.state.field(commandState, false);
|
2016
|
+
if (!cState?.tooltip) {
|
2017
|
+
const selection = update2.view.state.selection.main;
|
2018
|
+
const line = update2.view.state.doc.lineAt(selection.from);
|
2019
|
+
if (selection.from === selection.to && line.from === line.to) {
|
2020
|
+
const hint = onHint();
|
2021
|
+
if (hint) {
|
2022
|
+
builder.add(selection.from, selection.to, Decoration3.widget({
|
2023
|
+
widget: new CommandHint(hint)
|
2024
|
+
}));
|
2025
|
+
}
|
2026
|
+
}
|
2027
|
+
}
|
2028
|
+
this.deco = builder.finish();
|
2029
|
+
}
|
2030
|
+
}, {
|
2031
|
+
provide: (plugin) => [
|
2032
|
+
EditorView6.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration3.none)
|
2033
|
+
]
|
2034
|
+
});
|
2045
2035
|
|
2046
2036
|
// packages/ui/react-ui-editor/src/extensions/command/menu.ts
|
2047
2037
|
import { ViewPlugin as ViewPlugin4 } from "@codemirror/view";
|
@@ -2057,11 +2047,11 @@ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
|
2057
2047
|
this.button.style.position = "absolute";
|
2058
2048
|
this.button.style.zIndex = "10";
|
2059
2049
|
this.button.style.display = "none";
|
2060
|
-
options.
|
2061
|
-
|
2062
|
-
}
|
2050
|
+
options.onRenderMenu(this.button, () => {
|
2051
|
+
openCommand(view);
|
2052
|
+
});
|
2063
2053
|
container.appendChild(this.button);
|
2064
|
-
container.addEventListener("scroll", this.scheduleUpdate
|
2054
|
+
container.addEventListener("scroll", this.scheduleUpdate);
|
2065
2055
|
this.scheduleUpdate();
|
2066
2056
|
}
|
2067
2057
|
update(update2) {
|
@@ -2077,7 +2067,7 @@ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
|
2077
2067
|
if (this.rafId != null) {
|
2078
2068
|
cancelAnimationFrame(this.rafId);
|
2079
2069
|
}
|
2080
|
-
this.rafId = requestAnimationFrame(this.updateButtonPosition
|
2070
|
+
this.rafId = requestAnimationFrame(() => this.updateButtonPosition());
|
2081
2071
|
}
|
2082
2072
|
updateButtonPosition() {
|
2083
2073
|
const pos = this.view.state.selection.main.head;
|
@@ -2107,24 +2097,83 @@ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
|
2107
2097
|
}
|
2108
2098
|
});
|
2109
2099
|
|
2100
|
+
// packages/ui/react-ui-editor/src/extensions/command/preview.ts
|
2101
|
+
import { syntaxTree } from "@codemirror/language";
|
2102
|
+
import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField4 } from "@codemirror/state";
|
2103
|
+
import { Decoration as Decoration4, EditorView as EditorView7, WidgetType as WidgetType3 } from "@codemirror/view";
|
2104
|
+
var preview = (options) => {
|
2105
|
+
return [
|
2106
|
+
StateField4.define({
|
2107
|
+
create: (state) => buildDecorations(state, options),
|
2108
|
+
update: (_, tr) => buildDecorations(tr.state, options),
|
2109
|
+
// TODO(burdon): Make atomic.
|
2110
|
+
provide: (field) => EditorView7.decorations.from(field)
|
2111
|
+
})
|
2112
|
+
];
|
2113
|
+
};
|
2114
|
+
var buildDecorations = (state, options) => {
|
2115
|
+
const builder = new RangeSetBuilder2();
|
2116
|
+
syntaxTree(state).iterate({
|
2117
|
+
enter: (node) => {
|
2118
|
+
if (node.name === "Link") {
|
2119
|
+
const urlNode = node.node.getChild("URL");
|
2120
|
+
if (urlNode) {
|
2121
|
+
const text = state.sliceDoc(node.from + 1, urlNode.from - 2);
|
2122
|
+
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
2123
|
+
builder.add(node.from, node.to, Decoration4.replace({
|
2124
|
+
block: true,
|
2125
|
+
widget: new PreviewWidget(options.onRenderPreview, url, text)
|
2126
|
+
}));
|
2127
|
+
}
|
2128
|
+
}
|
2129
|
+
}
|
2130
|
+
});
|
2131
|
+
return builder.finish();
|
2132
|
+
};
|
2133
|
+
var PreviewWidget = class extends WidgetType3 {
|
2134
|
+
constructor(_onRenderPreview, _url, _text) {
|
2135
|
+
super();
|
2136
|
+
this._onRenderPreview = _onRenderPreview;
|
2137
|
+
this._url = _url;
|
2138
|
+
this._text = _text;
|
2139
|
+
}
|
2140
|
+
eq(other) {
|
2141
|
+
return this._url === other._url;
|
2142
|
+
}
|
2143
|
+
toDOM(view) {
|
2144
|
+
const root = document.createElement("div");
|
2145
|
+
root.classList.add("cm-preview");
|
2146
|
+
this._onRenderPreview(root, {
|
2147
|
+
url: this._url,
|
2148
|
+
text: this._text
|
2149
|
+
});
|
2150
|
+
return root;
|
2151
|
+
}
|
2152
|
+
};
|
2153
|
+
|
2110
2154
|
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
2111
|
-
var command = (options
|
2155
|
+
var command = (options) => {
|
2112
2156
|
return [
|
2113
|
-
keymap3.of(commandKeyBindings),
|
2114
2157
|
commandConfig.of(options),
|
2115
2158
|
commandState,
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
}) : [],
|
2122
|
-
EditorView7.focusChangeEffect.of((_, focusing) => {
|
2159
|
+
keymap3.of(commandKeyBindings),
|
2160
|
+
preview(options),
|
2161
|
+
floatingMenu(options),
|
2162
|
+
hintViewPlugin(options),
|
2163
|
+
EditorView8.focusChangeEffect.of((_, focusing) => {
|
2123
2164
|
return focusing ? closeEffect.of(null) : null;
|
2124
2165
|
}),
|
2125
|
-
|
2166
|
+
EditorView8.theme({
|
2126
2167
|
".cm-tooltip": {
|
2127
2168
|
background: "transparent"
|
2169
|
+
},
|
2170
|
+
".cm-preview": {
|
2171
|
+
marginLeft: "-1rem",
|
2172
|
+
marginRight: "-1rem",
|
2173
|
+
padding: "1rem",
|
2174
|
+
borderRadius: "1rem",
|
2175
|
+
background: "var(--dx-modalSurface)",
|
2176
|
+
border: "1px solid var(--dx-separator)"
|
2128
2177
|
}
|
2129
2178
|
})
|
2130
2179
|
];
|
@@ -2132,8 +2181,8 @@ var command = (options = {}) => {
|
|
2132
2181
|
|
2133
2182
|
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
2134
2183
|
import { invertedEffects } from "@codemirror/commands";
|
2135
|
-
import { StateEffect as StateEffect3, StateField as
|
2136
|
-
import { hoverTooltip, keymap as keymap5, Decoration as
|
2184
|
+
import { StateEffect as StateEffect3, StateField as StateField5 } from "@codemirror/state";
|
2185
|
+
import { hoverTooltip, keymap as keymap5, Decoration as Decoration5, EditorView as EditorView10, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
|
2137
2186
|
import sortBy from "lodash.sortby";
|
2138
2187
|
import { useEffect, useMemo as useMemo2 } from "react";
|
2139
2188
|
import { debounce as debounce2 } from "@dxos/async";
|
@@ -2142,7 +2191,7 @@ import { isNonNullable } from "@dxos/util";
|
|
2142
2191
|
|
2143
2192
|
// packages/ui/react-ui-editor/src/extensions/selection.ts
|
2144
2193
|
import { Transaction } from "@codemirror/state";
|
2145
|
-
import { EditorView as
|
2194
|
+
import { EditorView as EditorView9, keymap as keymap4 } from "@codemirror/view";
|
2146
2195
|
import { debounce } from "@dxos/async";
|
2147
2196
|
import { invariant as invariant3 } from "@dxos/invariant";
|
2148
2197
|
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
@@ -2153,7 +2202,7 @@ var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
|
2153
2202
|
return {
|
2154
2203
|
selection,
|
2155
2204
|
scrollIntoView: !scrollTo,
|
2156
|
-
effects: scrollTo ?
|
2205
|
+
effects: scrollTo ? EditorView9.scrollIntoView(scrollTo, {
|
2157
2206
|
yMargin: 96
|
2158
2207
|
}) : void 0,
|
2159
2208
|
annotations: Transaction.userEvent.of(stateRestoreAnnotation)
|
@@ -2195,7 +2244,7 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
2195
2244
|
// setStateDebounced(id, {});
|
2196
2245
|
// },
|
2197
2246
|
// }),
|
2198
|
-
|
2247
|
+
EditorView9.updateListener.of(({ view, transactions }) => {
|
2199
2248
|
const id = view.state.facet(documentId);
|
2200
2249
|
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
2201
2250
|
return;
|
@@ -2238,7 +2287,7 @@ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src
|
|
2238
2287
|
var setComments = StateEffect3.define();
|
2239
2288
|
var setSelection = StateEffect3.define();
|
2240
2289
|
var setCommentState = StateEffect3.define();
|
2241
|
-
var commentsState =
|
2290
|
+
var commentsState = StateField5.define({
|
2242
2291
|
create: (state) => ({
|
2243
2292
|
id: state.facet(documentId),
|
2244
2293
|
comments: [],
|
@@ -2276,7 +2325,7 @@ var commentsState = StateField4.define({
|
|
2276
2325
|
return value;
|
2277
2326
|
}
|
2278
2327
|
});
|
2279
|
-
var styles3 =
|
2328
|
+
var styles3 = EditorView10.theme({
|
2280
2329
|
".cm-comment, .cm-comment-current": {
|
2281
2330
|
margin: "0 -3px",
|
2282
2331
|
padding: "3px",
|
@@ -2289,14 +2338,14 @@ var styles3 = EditorView9.theme({
|
|
2289
2338
|
textDecoration: "underline"
|
2290
2339
|
}
|
2291
2340
|
});
|
2292
|
-
var createCommentMark = (id, isCurrent) =>
|
2341
|
+
var createCommentMark = (id, isCurrent) => Decoration5.mark({
|
2293
2342
|
class: isCurrent ? "cm-comment-current" : "cm-comment",
|
2294
2343
|
attributes: {
|
2295
2344
|
"data-testid": "cm-comment",
|
2296
2345
|
"data-comment-id": id
|
2297
2346
|
}
|
2298
2347
|
});
|
2299
|
-
var commentsDecorations =
|
2348
|
+
var commentsDecorations = EditorView10.decorations.compute([
|
2300
2349
|
commentsState
|
2301
2350
|
], (state) => {
|
2302
2351
|
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
@@ -2316,10 +2365,10 @@ var commentsDecorations = EditorView9.decorations.compute([
|
|
2316
2365
|
const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
|
2317
2366
|
return mark.range(range.from, range.to);
|
2318
2367
|
}).filter(isNonNullable);
|
2319
|
-
return
|
2368
|
+
return Decoration5.set(decorations);
|
2320
2369
|
});
|
2321
2370
|
var commentClickedEffect = StateEffect3.define();
|
2322
|
-
var handleCommentClick =
|
2371
|
+
var handleCommentClick = EditorView10.domEventHandlers({
|
2323
2372
|
click: (event, view) => {
|
2324
2373
|
let target = event.target;
|
2325
2374
|
const editorRoot = view.dom;
|
@@ -2358,7 +2407,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2358
2407
|
}
|
2359
2408
|
};
|
2360
2409
|
return [
|
2361
|
-
|
2410
|
+
EditorView10.domEventHandlers({
|
2362
2411
|
cut: handleTrack,
|
2363
2412
|
copy: handleTrack
|
2364
2413
|
}),
|
@@ -2380,7 +2429,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2380
2429
|
return effects;
|
2381
2430
|
}),
|
2382
2431
|
// Handle paste or the undo of comment deletion.
|
2383
|
-
|
2432
|
+
EditorView10.updateListener.of((update2) => {
|
2384
2433
|
const restore = [];
|
2385
2434
|
for (let i = 0; i < update2.transactions.length; i++) {
|
2386
2435
|
const tr = update2.transactions[i];
|
@@ -2491,7 +2540,7 @@ var comments = (options = {}) => {
|
|
2491
2540
|
// Hover tooltip (for key shortcut hints, etc.)
|
2492
2541
|
// TODO(burdon): Factor out to generic hints extension for current selection/line.
|
2493
2542
|
//
|
2494
|
-
options.
|
2543
|
+
options.onHover && hoverTooltip((view, pos) => {
|
2495
2544
|
const selection = view.state.selection.main;
|
2496
2545
|
if (selection && pos >= selection.from && pos <= selection.to) {
|
2497
2546
|
return {
|
@@ -2500,9 +2549,7 @@ var comments = (options = {}) => {
|
|
2500
2549
|
above: true,
|
2501
2550
|
create: () => {
|
2502
2551
|
const el = document.createElement("div");
|
2503
|
-
options.
|
2504
|
-
shortcut
|
2505
|
-
}, view);
|
2552
|
+
options.onHover(el, shortcut);
|
2506
2553
|
return {
|
2507
2554
|
dom: el,
|
2508
2555
|
offset: {
|
@@ -2522,7 +2569,7 @@ var comments = (options = {}) => {
|
|
2522
2569
|
//
|
2523
2570
|
// Track deleted ranges and update ranges for decorations.
|
2524
2571
|
//
|
2525
|
-
|
2572
|
+
EditorView10.updateListener.of(({ view, state, changes }) => {
|
2526
2573
|
let mod = false;
|
2527
2574
|
const { comments: comments2, ...value } = state.field(commentsState);
|
2528
2575
|
changes.iterChanges((from, to, from2, to2) => {
|
@@ -2554,7 +2601,7 @@ var comments = (options = {}) => {
|
|
2554
2601
|
//
|
2555
2602
|
// Track selection/proximity.
|
2556
2603
|
//
|
2557
|
-
|
2604
|
+
EditorView10.updateListener.of(({ view, state }) => {
|
2558
2605
|
let min = Infinity;
|
2559
2606
|
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2560
2607
|
const { head } = state.selection.main;
|
@@ -2608,7 +2655,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2608
2655
|
anchor: range.from
|
2609
2656
|
} : void 0,
|
2610
2657
|
effects: [
|
2611
|
-
needsScroll ?
|
2658
|
+
needsScroll ? EditorView10.scrollIntoView(range.from, center ? {
|
2612
2659
|
y: "center"
|
2613
2660
|
} : void 0) : [],
|
2614
2661
|
needsSelectionUpdate ? setSelection.of({
|
@@ -2660,7 +2707,7 @@ var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin5.from
|
|
2660
2707
|
}
|
2661
2708
|
});
|
2662
2709
|
var useCommentState = (state) => {
|
2663
|
-
return useMemo2(() =>
|
2710
|
+
return useMemo2(() => EditorView10.updateListener.of((update2) => {
|
2664
2711
|
if (update2.docChanged || update2.selectionSet) {
|
2665
2712
|
state.comment = selectionOverlapsComment(update2.state);
|
2666
2713
|
state.selection = hasActiveSelection(update2.state);
|
@@ -2684,7 +2731,7 @@ var useComments = (view, id, comments2) => {
|
|
2684
2731
|
});
|
2685
2732
|
};
|
2686
2733
|
var useCommentClickListener = (onCommentClick) => {
|
2687
|
-
return useMemo2(() =>
|
2734
|
+
return useMemo2(() => EditorView10.updateListener.of((update2) => {
|
2688
2735
|
update2.transactions.forEach((transaction) => {
|
2689
2736
|
transaction.effects.forEach((effect) => {
|
2690
2737
|
if (effect.is(commentClickedEffect)) {
|
@@ -2698,21 +2745,21 @@ var useCommentClickListener = (onCommentClick) => {
|
|
2698
2745
|
};
|
2699
2746
|
|
2700
2747
|
// packages/ui/react-ui-editor/src/extensions/debug.ts
|
2701
|
-
import { syntaxTree } from "@codemirror/language";
|
2702
|
-
import { StateField as
|
2748
|
+
import { syntaxTree as syntaxTree2 } from "@codemirror/language";
|
2749
|
+
import { StateField as StateField6 } from "@codemirror/state";
|
2703
2750
|
var debugNodeLogger = (log8 = console.log) => {
|
2704
|
-
const logTokens = (state) =>
|
2751
|
+
const logTokens = (state) => syntaxTree2(state).iterate({
|
2705
2752
|
enter: (node) => log8(node.type)
|
2706
2753
|
});
|
2707
|
-
return
|
2754
|
+
return StateField6.define({
|
2708
2755
|
create: (state) => logTokens(state),
|
2709
2756
|
update: (_, tr) => logTokens(tr.state)
|
2710
2757
|
});
|
2711
2758
|
};
|
2712
2759
|
|
2713
2760
|
// packages/ui/react-ui-editor/src/extensions/dnd.ts
|
2714
|
-
import { dropCursor, EditorView as
|
2715
|
-
var styles4 =
|
2761
|
+
import { dropCursor, EditorView as EditorView11 } from "@codemirror/view";
|
2762
|
+
var styles4 = EditorView11.theme({
|
2716
2763
|
".cm-dropCursor": {
|
2717
2764
|
borderLeft: "2px solid var(--dx-accentText)",
|
2718
2765
|
color: "var(--dx-accentText)",
|
@@ -2726,7 +2773,7 @@ var dropFile = (options = {}) => {
|
|
2726
2773
|
return [
|
2727
2774
|
styles4,
|
2728
2775
|
dropCursor(),
|
2729
|
-
|
2776
|
+
EditorView11.domEventHandlers({
|
2730
2777
|
drop: (event, view) => {
|
2731
2778
|
event.preventDefault();
|
2732
2779
|
const files = event.dataTransfer?.files;
|
@@ -2753,7 +2800,7 @@ import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@cod
|
|
2753
2800
|
import { searchKeymap } from "@codemirror/search";
|
2754
2801
|
import { EditorState } from "@codemirror/state";
|
2755
2802
|
import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
|
2756
|
-
import { EditorView as
|
2803
|
+
import { EditorView as EditorView13, drawSelection, dropCursor as dropCursor2, highlightActiveLine, keymap as keymap6, lineNumbers, placeholder, scrollPastEnd } from "@codemirror/view";
|
2757
2804
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
2758
2805
|
import merge from "lodash.merge";
|
2759
2806
|
import { generateName } from "@dxos/display-name";
|
@@ -2761,10 +2808,10 @@ import { log as log5 } from "@dxos/log";
|
|
2761
2808
|
import { hexToHue, isNotFalsy as isNotFalsy3 } from "@dxos/util";
|
2762
2809
|
|
2763
2810
|
// packages/ui/react-ui-editor/src/extensions/focus.ts
|
2764
|
-
import { StateEffect as StateEffect4, StateField as
|
2765
|
-
import { EditorView as
|
2811
|
+
import { StateEffect as StateEffect4, StateField as StateField7 } from "@codemirror/state";
|
2812
|
+
import { EditorView as EditorView12 } from "@codemirror/view";
|
2766
2813
|
var focusEffect = StateEffect4.define();
|
2767
|
-
var focusField =
|
2814
|
+
var focusField = StateField7.define({
|
2768
2815
|
create: () => false,
|
2769
2816
|
update: (value, tr) => {
|
2770
2817
|
for (const effect of tr.effects) {
|
@@ -2777,7 +2824,7 @@ var focusField = StateField6.define({
|
|
2777
2824
|
});
|
2778
2825
|
var focus = [
|
2779
2826
|
focusField,
|
2780
|
-
|
2827
|
+
EditorView12.domEventHandlers({
|
2781
2828
|
focus: (event, view) => {
|
2782
2829
|
setTimeout(() => view.dispatch({
|
2783
2830
|
effects: focusEffect.of(true)
|
@@ -2815,7 +2862,7 @@ var createBasicExtensions = (_props) => {
|
|
2815
2862
|
const props = defaultsDeep2({}, _props, defaultBasicOptions);
|
2816
2863
|
return [
|
2817
2864
|
// NOTE: Doesn't catch errors in keymap functions.
|
2818
|
-
|
2865
|
+
EditorView13.exceptionSink.of((err) => {
|
2819
2866
|
log5.catch(err, void 0, {
|
2820
2867
|
F: __dxlog_file8,
|
2821
2868
|
L: 96,
|
@@ -2830,12 +2877,12 @@ var createBasicExtensions = (_props) => {
|
|
2830
2877
|
props.drawSelection && drawSelection({
|
2831
2878
|
cursorBlinkRate: 1200
|
2832
2879
|
}),
|
2833
|
-
props.editable !== void 0 &&
|
2880
|
+
props.editable !== void 0 && EditorView13.editable.of(props.editable),
|
2834
2881
|
props.focus && focus,
|
2835
2882
|
props.highlightActiveLine && highlightActiveLine(),
|
2836
2883
|
props.history && history(),
|
2837
2884
|
props.lineNumbers && lineNumbers(),
|
2838
|
-
props.lineWrapping &&
|
2885
|
+
props.lineWrapping && EditorView13.lineWrapping,
|
2839
2886
|
props.placeholder && placeholder(props.placeholder),
|
2840
2887
|
props.readOnly !== void 0 && EditorState.readOnly.of(props.readOnly),
|
2841
2888
|
props.scrollPastEnd && scrollPastEnd(),
|
@@ -2872,14 +2919,14 @@ var defaultThemeSlots = {
|
|
2872
2919
|
var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2873
2920
|
const slots = defaultsDeep2({}, _slots, defaultThemeSlots);
|
2874
2921
|
return [
|
2875
|
-
|
2876
|
-
|
2922
|
+
EditorView13.darkTheme.of(themeMode === "dark"),
|
2923
|
+
EditorView13.baseTheme(styles5 ? merge({}, defaultTheme, styles5) : defaultTheme),
|
2877
2924
|
// https://github.com/codemirror/theme-one-dark
|
2878
2925
|
_syntaxHighlighting && (themeMode === "dark" ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle)),
|
2879
|
-
slots.editor?.className &&
|
2926
|
+
slots.editor?.className && EditorView13.editorAttributes.of({
|
2880
2927
|
class: slots.editor.className
|
2881
2928
|
}),
|
2882
|
-
slots.content?.className &&
|
2929
|
+
slots.content?.className && EditorView13.contentAttributes.of({
|
2883
2930
|
class: slots.content.className
|
2884
2931
|
})
|
2885
2932
|
].filter(isNotFalsy3);
|
@@ -2908,7 +2955,7 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
2908
2955
|
|
2909
2956
|
// packages/ui/react-ui-editor/src/extensions/folding.tsx
|
2910
2957
|
import { codeFolding, foldGutter } from "@codemirror/language";
|
2911
|
-
import { EditorView as
|
2958
|
+
import { EditorView as EditorView14 } from "@codemirror/view";
|
2912
2959
|
import React3 from "react";
|
2913
2960
|
import { Icon } from "@dxos/react-ui";
|
2914
2961
|
var folding = (_props = {}) => [
|
@@ -2923,7 +2970,7 @@ var folding = (_props = {}) => [
|
|
2923
2970
|
className: "flex h-full items-center"
|
2924
2971
|
});
|
2925
2972
|
return renderRoot(el, /* @__PURE__ */ React3.createElement(Icon, {
|
2926
|
-
icon: "ph--caret-right--
|
2973
|
+
icon: "ph--caret-right--regular",
|
2927
2974
|
size: 3,
|
2928
2975
|
classNames: [
|
2929
2976
|
"mx-3 cursor-pointer",
|
@@ -2932,7 +2979,7 @@ var folding = (_props = {}) => [
|
|
2932
2979
|
}));
|
2933
2980
|
}
|
2934
2981
|
}),
|
2935
|
-
|
2982
|
+
EditorView14.theme({
|
2936
2983
|
".cm-foldGutter": {
|
2937
2984
|
opacity: 0.3,
|
2938
2985
|
transition: "opacity 0.3s",
|
@@ -2945,14 +2992,14 @@ var folding = (_props = {}) => [
|
|
2945
2992
|
];
|
2946
2993
|
|
2947
2994
|
// packages/ui/react-ui-editor/src/extensions/listener.ts
|
2948
|
-
import { EditorView as
|
2995
|
+
import { EditorView as EditorView15 } from "@codemirror/view";
|
2949
2996
|
var listener = ({ onFocus, onChange }) => {
|
2950
2997
|
const extensions = [];
|
2951
|
-
onFocus && extensions.push(
|
2998
|
+
onFocus && extensions.push(EditorView15.focusChangeEffect.of((_, focusing) => {
|
2952
2999
|
onFocus(focusing);
|
2953
3000
|
return null;
|
2954
3001
|
}));
|
2955
|
-
onChange && extensions.push(
|
3002
|
+
onChange && extensions.push(EditorView15.updateListener.of((update2) => {
|
2956
3003
|
onChange(update2.state.doc.toString(), update2.state.facet(documentId));
|
2957
3004
|
}));
|
2958
3005
|
return extensions;
|
@@ -2960,9 +3007,9 @@ var listener = ({ onFocus, onChange }) => {
|
|
2960
3007
|
|
2961
3008
|
// packages/ui/react-ui-editor/src/extensions/markdown/formatting.ts
|
2962
3009
|
import { snippet } from "@codemirror/autocomplete";
|
2963
|
-
import { syntaxTree as
|
3010
|
+
import { syntaxTree as syntaxTree3 } from "@codemirror/language";
|
2964
3011
|
import { EditorSelection } from "@codemirror/state";
|
2965
|
-
import { EditorView as
|
3012
|
+
import { EditorView as EditorView16, keymap as keymap7 } from "@codemirror/view";
|
2966
3013
|
import { useMemo as useMemo3 } from "react";
|
2967
3014
|
var formattingEquals = (a, b) => a.blockType === b.blockType && a.strong === b.strong && a.emphasis === b.emphasis && a.strikethrough === b.strikethrough && a.code === b.code && a.link === b.link && a.listStyle === b.listStyle && a.blockQuote === b.blockQuote;
|
2968
3015
|
var Inline;
|
@@ -2985,7 +3032,7 @@ var setHeading = (level) => {
|
|
2985
3032
|
let prevBlock = -1;
|
2986
3033
|
for (const range of ranges) {
|
2987
3034
|
let sawBlock = false;
|
2988
|
-
|
3035
|
+
syntaxTree3(state).iterate({
|
2989
3036
|
from: range.from,
|
2990
3037
|
to: range.to,
|
2991
3038
|
enter: (node) => {
|
@@ -3094,7 +3141,7 @@ var setStyle = (type, enable) => {
|
|
3094
3141
|
let startCovered = false;
|
3095
3142
|
let endCovered = false;
|
3096
3143
|
let { from, to } = range;
|
3097
|
-
|
3144
|
+
syntaxTree3(state).iterate({
|
3098
3145
|
from,
|
3099
3146
|
to,
|
3100
3147
|
enter: (node) => {
|
@@ -3297,7 +3344,7 @@ var insertTable = (view) => {
|
|
3297
3344
|
snippets.table(view, null, from, from);
|
3298
3345
|
};
|
3299
3346
|
var removeLinkInner = (from, to, changes, state) => {
|
3300
|
-
|
3347
|
+
syntaxTree3(state).iterate({
|
3301
3348
|
from,
|
3302
3349
|
to,
|
3303
3350
|
enter: (node) => {
|
@@ -3342,7 +3389,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3342
3389
|
let { from, to } = range;
|
3343
3390
|
const cutStyles = [];
|
3344
3391
|
let okay = null;
|
3345
|
-
|
3392
|
+
syntaxTree3(state).iterate({
|
3346
3393
|
from,
|
3347
3394
|
to,
|
3348
3395
|
enter: (node) => {
|
@@ -3437,7 +3484,7 @@ var addList = (type) => {
|
|
3437
3484
|
let parentColumn = null;
|
3438
3485
|
const blocks = [];
|
3439
3486
|
for (const { from, to } of state.selection.ranges) {
|
3440
|
-
|
3487
|
+
syntaxTree3(state).iterate({
|
3441
3488
|
from,
|
3442
3489
|
to,
|
3443
3490
|
enter: (node) => {
|
@@ -3572,7 +3619,7 @@ var removeList = (type) => {
|
|
3572
3619
|
const stack = [];
|
3573
3620
|
const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
|
3574
3621
|
for (const { from, to } of state.selection.ranges) {
|
3575
|
-
|
3622
|
+
syntaxTree3(state).iterate({
|
3576
3623
|
from,
|
3577
3624
|
to,
|
3578
3625
|
enter: (node) => {
|
@@ -3659,7 +3706,7 @@ var setBlockquote = (enable) => {
|
|
3659
3706
|
let lastBlock = -1;
|
3660
3707
|
for (const { from, to } of state.selection.ranges) {
|
3661
3708
|
const sawBlock = false;
|
3662
|
-
|
3709
|
+
syntaxTree3(state).iterate({
|
3663
3710
|
from,
|
3664
3711
|
to,
|
3665
3712
|
enter: (node) => {
|
@@ -3749,7 +3796,7 @@ var addCodeblock = (target) => {
|
|
3749
3796
|
for (const { from, to } of selection.ranges) {
|
3750
3797
|
let blockFrom = from;
|
3751
3798
|
let blockTo = to;
|
3752
|
-
|
3799
|
+
syntaxTree3(state).iterate({
|
3753
3800
|
from,
|
3754
3801
|
to,
|
3755
3802
|
enter: (node) => {
|
@@ -3800,7 +3847,7 @@ var removeCodeblock = ({ state, dispatch }) => {
|
|
3800
3847
|
let lastBlock = -1;
|
3801
3848
|
const changes = [];
|
3802
3849
|
for (const { from, to } of state.selection.ranges) {
|
3803
|
-
|
3850
|
+
syntaxTree3(state).iterate({
|
3804
3851
|
from,
|
3805
3852
|
to,
|
3806
3853
|
enter: (node) => {
|
@@ -3962,7 +4009,7 @@ var getFormatting = (state) => {
|
|
3962
4009
|
}
|
3963
4010
|
}
|
3964
4011
|
}
|
3965
|
-
|
4012
|
+
syntaxTree3(state).iterate({
|
3966
4013
|
from: range.from,
|
3967
4014
|
to: range.to,
|
3968
4015
|
enter: (node) => {
|
@@ -4051,7 +4098,7 @@ var getFormatting = (state) => {
|
|
4051
4098
|
};
|
4052
4099
|
};
|
4053
4100
|
var useFormattingState = (state) => {
|
4054
|
-
return useMemo3(() =>
|
4101
|
+
return useMemo3(() => EditorView16.updateListener.of((update2) => {
|
4055
4102
|
if (update2.docChanged || update2.selectionSet) {
|
4056
4103
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
4057
4104
|
state[key] = active;
|
@@ -4334,9 +4381,9 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
4334
4381
|
};
|
4335
4382
|
|
4336
4383
|
// packages/ui/react-ui-editor/src/extensions/markdown/debug.ts
|
4337
|
-
import { syntaxTree as
|
4338
|
-
import { StateField as
|
4339
|
-
var debugTree = (cb) =>
|
4384
|
+
import { syntaxTree as syntaxTree4 } from "@codemirror/language";
|
4385
|
+
import { StateField as StateField8 } from "@codemirror/state";
|
4386
|
+
var debugTree = (cb) => StateField8.define({
|
4340
4387
|
create: (state) => cb(convertTreeToJson(state)),
|
4341
4388
|
update: (value, tr) => cb(convertTreeToJson(tr.state))
|
4342
4389
|
});
|
@@ -4357,24 +4404,24 @@ var convertTreeToJson = (state) => {
|
|
4357
4404
|
}
|
4358
4405
|
return node;
|
4359
4406
|
};
|
4360
|
-
return treeToJson(
|
4407
|
+
return treeToJson(syntaxTree4(state).cursor());
|
4361
4408
|
};
|
4362
4409
|
|
4363
4410
|
// packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts
|
4364
|
-
import { syntaxTree as
|
4365
|
-
import { RangeSetBuilder as
|
4366
|
-
import { EditorView as
|
4411
|
+
import { syntaxTree as syntaxTree8 } from "@codemirror/language";
|
4412
|
+
import { RangeSetBuilder as RangeSetBuilder4, StateEffect as StateEffect5 } from "@codemirror/state";
|
4413
|
+
import { EditorView as EditorView20, Decoration as Decoration8, WidgetType as WidgetType6, ViewPlugin as ViewPlugin7 } from "@codemirror/view";
|
4367
4414
|
import { invariant as invariant4 } from "@dxos/invariant";
|
4368
|
-
import { mx as
|
4415
|
+
import { mx as mx4 } from "@dxos/react-ui-theme";
|
4369
4416
|
|
4370
4417
|
// packages/ui/react-ui-editor/src/extensions/markdown/changes.ts
|
4371
|
-
import { syntaxTree as
|
4418
|
+
import { syntaxTree as syntaxTree5 } from "@codemirror/language";
|
4372
4419
|
import { Transaction as Transaction2 } from "@codemirror/state";
|
4373
4420
|
import { ViewPlugin as ViewPlugin6 } from "@codemirror/view";
|
4374
4421
|
var adjustChanges = () => {
|
4375
4422
|
return ViewPlugin6.fromClass(class {
|
4376
4423
|
update(update2) {
|
4377
|
-
const tree =
|
4424
|
+
const tree = syntaxTree5(update2.state);
|
4378
4425
|
const adjustments = [];
|
4379
4426
|
for (const tr of update2.transactions) {
|
4380
4427
|
const event = tr.annotation(Transaction2.userEvent);
|
@@ -4512,14 +4559,14 @@ var getValidUrl = (str) => {
|
|
4512
4559
|
};
|
4513
4560
|
|
4514
4561
|
// packages/ui/react-ui-editor/src/extensions/markdown/image.ts
|
4515
|
-
import { syntaxTree as
|
4516
|
-
import { StateField as
|
4517
|
-
import { Decoration as
|
4562
|
+
import { syntaxTree as syntaxTree6 } from "@codemirror/language";
|
4563
|
+
import { StateField as StateField9 } from "@codemirror/state";
|
4564
|
+
import { Decoration as Decoration6, EditorView as EditorView17, WidgetType as WidgetType4 } from "@codemirror/view";
|
4518
4565
|
var image = (_options = {}) => {
|
4519
4566
|
return [
|
4520
|
-
|
4567
|
+
StateField9.define({
|
4521
4568
|
create: (state) => {
|
4522
|
-
return
|
4569
|
+
return Decoration6.set(buildDecorations2(0, state.doc.length, state));
|
4523
4570
|
},
|
4524
4571
|
update: (value, tr) => {
|
4525
4572
|
if (!tr.docChanged && !tr.selection) {
|
@@ -4539,17 +4586,25 @@ var image = (_options = {}) => {
|
|
4539
4586
|
filterFrom: from,
|
4540
4587
|
filterTo: to,
|
4541
4588
|
filter: () => false,
|
4542
|
-
add:
|
4589
|
+
add: buildDecorations2(from, to, tr.state)
|
4543
4590
|
});
|
4544
4591
|
},
|
4545
|
-
provide: (field) =>
|
4592
|
+
provide: (field) => EditorView17.decorations.from(field)
|
4546
4593
|
})
|
4547
4594
|
];
|
4548
4595
|
};
|
4549
|
-
var
|
4596
|
+
var preloaded = /* @__PURE__ */ new Set();
|
4597
|
+
var preloadImage = (url) => {
|
4598
|
+
if (!preloaded.has(url)) {
|
4599
|
+
const img = document.createElement("img");
|
4600
|
+
img.src = url;
|
4601
|
+
preloaded.add(url);
|
4602
|
+
}
|
4603
|
+
};
|
4604
|
+
var buildDecorations2 = (from, to, state) => {
|
4550
4605
|
const decorations = [];
|
4551
4606
|
const cursor = state.selection.main.head;
|
4552
|
-
|
4607
|
+
syntaxTree6(state).iterate({
|
4553
4608
|
enter: (node) => {
|
4554
4609
|
if (node.name === "Image") {
|
4555
4610
|
const urlNode = node.node.getChild("URL");
|
@@ -4560,7 +4615,7 @@ var buildDecorations = (from, to, state) => {
|
|
4560
4615
|
return;
|
4561
4616
|
}
|
4562
4617
|
preloadImage(url);
|
4563
|
-
decorations.push(
|
4618
|
+
decorations.push(Decoration6.replace({
|
4564
4619
|
block: true,
|
4565
4620
|
widget: new ImageWidget(url)
|
4566
4621
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4572,15 +4627,7 @@ var buildDecorations = (from, to, state) => {
|
|
4572
4627
|
});
|
4573
4628
|
return decorations;
|
4574
4629
|
};
|
4575
|
-
var
|
4576
|
-
var preloadImage = (url) => {
|
4577
|
-
if (!preloaded.has(url)) {
|
4578
|
-
const img = document.createElement("img");
|
4579
|
-
img.src = url;
|
4580
|
-
preloaded.add(url);
|
4581
|
-
}
|
4582
|
-
};
|
4583
|
-
var ImageWidget = class extends WidgetType3 {
|
4630
|
+
var ImageWidget = class extends WidgetType4 {
|
4584
4631
|
constructor(_url) {
|
4585
4632
|
super();
|
4586
4633
|
this._url = _url;
|
@@ -4602,10 +4649,10 @@ var ImageWidget = class extends WidgetType3 {
|
|
4602
4649
|
};
|
4603
4650
|
|
4604
4651
|
// packages/ui/react-ui-editor/src/extensions/markdown/styles.ts
|
4605
|
-
import { EditorView as
|
4652
|
+
import { EditorView as EditorView18 } from "@codemirror/view";
|
4606
4653
|
var bulletListIndentationWidth = 24;
|
4607
4654
|
var orderedListIndentationWidth = 36;
|
4608
|
-
var formattingStyles =
|
4655
|
+
var formattingStyles = EditorView18.theme({
|
4609
4656
|
/**
|
4610
4657
|
* Horizontal rule.
|
4611
4658
|
*/
|
@@ -4724,18 +4771,18 @@ var formattingStyles = EditorView17.theme({
|
|
4724
4771
|
});
|
4725
4772
|
|
4726
4773
|
// packages/ui/react-ui-editor/src/extensions/markdown/table.ts
|
4727
|
-
import { syntaxTree as
|
4728
|
-
import { RangeSetBuilder as
|
4729
|
-
import { Decoration as
|
4774
|
+
import { syntaxTree as syntaxTree7 } from "@codemirror/language";
|
4775
|
+
import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField10 } from "@codemirror/state";
|
4776
|
+
import { Decoration as Decoration7, EditorView as EditorView19, WidgetType as WidgetType5 } from "@codemirror/view";
|
4730
4777
|
var table = (options = {}) => {
|
4731
|
-
return
|
4778
|
+
return StateField10.define({
|
4732
4779
|
create: (state) => update(state, options),
|
4733
4780
|
update: (_, tr) => update(tr.state, options),
|
4734
|
-
provide: (field) =>
|
4781
|
+
provide: (field) => EditorView19.decorations.from(field)
|
4735
4782
|
});
|
4736
4783
|
};
|
4737
4784
|
var update = (state, _options) => {
|
4738
|
-
const builder = new
|
4785
|
+
const builder = new RangeSetBuilder3();
|
4739
4786
|
const cursor = state.selection.main.head;
|
4740
4787
|
const tables = [];
|
4741
4788
|
const getTable = () => tables[tables.length - 1];
|
@@ -4743,7 +4790,7 @@ var update = (state, _options) => {
|
|
4743
4790
|
const table2 = getTable();
|
4744
4791
|
return table2.rows?.[table2.rows.length - 1];
|
4745
4792
|
};
|
4746
|
-
|
4793
|
+
syntaxTree7(state).iterate({
|
4747
4794
|
enter: (node) => {
|
4748
4795
|
switch (node.name) {
|
4749
4796
|
case "Table": {
|
@@ -4776,19 +4823,19 @@ var update = (state, _options) => {
|
|
4776
4823
|
tables.forEach((table2) => {
|
4777
4824
|
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4778
4825
|
if (replace) {
|
4779
|
-
builder.add(table2.from, table2.to,
|
4826
|
+
builder.add(table2.from, table2.to, Decoration7.replace({
|
4780
4827
|
block: true,
|
4781
4828
|
widget: new TableWidget(table2)
|
4782
4829
|
}));
|
4783
4830
|
} else {
|
4784
|
-
builder.add(table2.from, table2.to,
|
4831
|
+
builder.add(table2.from, table2.to, Decoration7.mark({
|
4785
4832
|
class: "cm-table"
|
4786
4833
|
}));
|
4787
4834
|
}
|
4788
4835
|
});
|
4789
4836
|
return builder.finish();
|
4790
4837
|
};
|
4791
|
-
var TableWidget = class extends
|
4838
|
+
var TableWidget = class extends WidgetType5 {
|
4792
4839
|
constructor(_table) {
|
4793
4840
|
super();
|
4794
4841
|
this._table = _table;
|
@@ -4830,14 +4877,14 @@ var Unicode = {
|
|
4830
4877
|
bulletSmall: "\u2219",
|
4831
4878
|
bulletSquare: "\u2B1D"
|
4832
4879
|
};
|
4833
|
-
var HorizontalRuleWidget = class extends
|
4880
|
+
var HorizontalRuleWidget = class extends WidgetType6 {
|
4834
4881
|
toDOM() {
|
4835
4882
|
const el = document.createElement("span");
|
4836
4883
|
el.className = "cm-hr";
|
4837
4884
|
return el;
|
4838
4885
|
}
|
4839
4886
|
};
|
4840
|
-
var LinkButton = class extends
|
4887
|
+
var LinkButton = class extends WidgetType6 {
|
4841
4888
|
constructor(url, render) {
|
4842
4889
|
super();
|
4843
4890
|
this.url = url;
|
@@ -4849,13 +4896,11 @@ var LinkButton = class extends WidgetType5 {
|
|
4849
4896
|
// TODO(burdon): Create icon and link directly without react?
|
4850
4897
|
toDOM(view) {
|
4851
4898
|
const el = document.createElement("span");
|
4852
|
-
this.render(el,
|
4853
|
-
url: this.url
|
4854
|
-
}, view);
|
4899
|
+
this.render(el, this.url);
|
4855
4900
|
return el;
|
4856
4901
|
}
|
4857
4902
|
};
|
4858
|
-
var CheckboxWidget = class extends
|
4903
|
+
var CheckboxWidget = class extends WidgetType6 {
|
4859
4904
|
constructor(_checked) {
|
4860
4905
|
super();
|
4861
4906
|
this._checked = _checked;
|
@@ -4900,7 +4945,7 @@ var CheckboxWidget = class extends WidgetType5 {
|
|
4900
4945
|
return false;
|
4901
4946
|
}
|
4902
4947
|
};
|
4903
|
-
var TextWidget = class extends
|
4948
|
+
var TextWidget = class extends WidgetType6 {
|
4904
4949
|
constructor(text, className) {
|
4905
4950
|
super();
|
4906
4951
|
this.text = text;
|
@@ -4915,29 +4960,29 @@ var TextWidget = class extends WidgetType5 {
|
|
4915
4960
|
return el;
|
4916
4961
|
}
|
4917
4962
|
};
|
4918
|
-
var hide =
|
4919
|
-
var blockQuote =
|
4920
|
-
class:
|
4963
|
+
var hide = Decoration8.replace({});
|
4964
|
+
var blockQuote = Decoration8.line({
|
4965
|
+
class: mx4("cm-blockquote")
|
4921
4966
|
});
|
4922
|
-
var fencedCodeLine =
|
4923
|
-
class:
|
4967
|
+
var fencedCodeLine = Decoration8.line({
|
4968
|
+
class: mx4("cm-code cm-codeblock-line")
|
4924
4969
|
});
|
4925
|
-
var fencedCodeLineFirst =
|
4926
|
-
class:
|
4970
|
+
var fencedCodeLineFirst = Decoration8.line({
|
4971
|
+
class: mx4("cm-code cm-codeblock-line", "cm-codeblock-first")
|
4927
4972
|
});
|
4928
|
-
var fencedCodeLineLast =
|
4929
|
-
class:
|
4973
|
+
var fencedCodeLineLast = Decoration8.line({
|
4974
|
+
class: mx4("cm-code cm-codeblock-line", "cm-codeblock-last")
|
4930
4975
|
});
|
4931
4976
|
var commentBlockLine = fencedCodeLine;
|
4932
4977
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
4933
4978
|
var commentBlockLineLast = fencedCodeLineLast;
|
4934
|
-
var horizontalRule =
|
4979
|
+
var horizontalRule = Decoration8.replace({
|
4935
4980
|
widget: new HorizontalRuleWidget()
|
4936
4981
|
});
|
4937
|
-
var checkedTask =
|
4982
|
+
var checkedTask = Decoration8.replace({
|
4938
4983
|
widget: new CheckboxWidget(true)
|
4939
4984
|
});
|
4940
|
-
var uncheckedTask =
|
4985
|
+
var uncheckedTask = Decoration8.replace({
|
4941
4986
|
widget: new CheckboxWidget(false)
|
4942
4987
|
});
|
4943
4988
|
var editingRange = (state, range, focus2) => {
|
@@ -4952,15 +4997,15 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
4952
4997
|
"SubscriptMark",
|
4953
4998
|
"SuperscriptMark"
|
4954
4999
|
]);
|
4955
|
-
var
|
4956
|
-
const deco = new
|
4957
|
-
const atomicDeco = new
|
5000
|
+
var buildDecorations3 = (view, options, focus2) => {
|
5001
|
+
const deco = new RangeSetBuilder4();
|
5002
|
+
const atomicDeco = new RangeSetBuilder4();
|
4958
5003
|
const { state } = view;
|
4959
5004
|
const headerLevels = [];
|
4960
5005
|
const getHeaderLevels = (node, level) => {
|
4961
5006
|
invariant4(level > 0, void 0, {
|
4962
5007
|
F: __dxlog_file9,
|
4963
|
-
L:
|
5008
|
+
L: 178,
|
4964
5009
|
S: void 0,
|
4965
5010
|
A: [
|
4966
5011
|
"level > 0",
|
@@ -4999,7 +5044,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4999
5044
|
const getCurrentListLevel = () => {
|
5000
5045
|
invariant4(listLevels.length, void 0, {
|
5001
5046
|
F: __dxlog_file9,
|
5002
|
-
L:
|
5047
|
+
L: 200,
|
5003
5048
|
S: void 0,
|
5004
5049
|
A: [
|
5005
5050
|
"listLevels.length",
|
@@ -5041,7 +5086,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5041
5086
|
} else {
|
5042
5087
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
5043
5088
|
if (num.length) {
|
5044
|
-
atomicDeco.add(mark.from, mark.from + len,
|
5089
|
+
atomicDeco.add(mark.from, mark.from + len, Decoration8.replace({
|
5045
5090
|
widget: new TextWidget(num, theme.heading(level))
|
5046
5091
|
}));
|
5047
5092
|
}
|
@@ -5066,7 +5111,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5066
5111
|
if (node.from === line.to - 1) {
|
5067
5112
|
return false;
|
5068
5113
|
}
|
5069
|
-
deco.add(line.from, line.from,
|
5114
|
+
deco.add(line.from, line.from, Decoration8.line({
|
5070
5115
|
class: "cm-list-item",
|
5071
5116
|
attributes: {
|
5072
5117
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -5083,7 +5128,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5083
5128
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
5084
5129
|
const line = state.doc.lineAt(node.from);
|
5085
5130
|
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
5086
|
-
atomicDeco.add(line.from, to,
|
5131
|
+
atomicDeco.add(line.from, to, Decoration8.replace({
|
5087
5132
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
5088
5133
|
}));
|
5089
5134
|
break;
|
@@ -5170,7 +5215,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5170
5215
|
if (!editing) {
|
5171
5216
|
atomicDeco.add(node.from, marks[0].to, hide);
|
5172
5217
|
}
|
5173
|
-
deco.add(marks[0].to, marks[1].from,
|
5218
|
+
deco.add(marks[0].to, marks[1].from, Decoration8.mark({
|
5174
5219
|
tagName: "a",
|
5175
5220
|
attributes: {
|
5176
5221
|
class: "cm-link",
|
@@ -5180,7 +5225,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5180
5225
|
}
|
5181
5226
|
}));
|
5182
5227
|
if (!editing) {
|
5183
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
5228
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? Decoration8.replace({
|
5184
5229
|
widget: new LinkButton(url, options.renderLinkButton)
|
5185
5230
|
}) : hide);
|
5186
5231
|
}
|
@@ -5214,7 +5259,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5214
5259
|
}
|
5215
5260
|
}
|
5216
5261
|
};
|
5217
|
-
const tree =
|
5262
|
+
const tree = syntaxTree8(state);
|
5218
5263
|
if (options.numberedHeadings?.from === void 0) {
|
5219
5264
|
for (const { from, to } of view.visibleRanges) {
|
5220
5265
|
tree.iterate({
|
@@ -5240,11 +5285,11 @@ var decorateMarkdown = (options = {}) => {
|
|
5240
5285
|
return [
|
5241
5286
|
ViewPlugin7.fromClass(class {
|
5242
5287
|
constructor(view) {
|
5243
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5288
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(view, options, view.hasFocus));
|
5244
5289
|
}
|
5245
5290
|
update(update2) {
|
5246
5291
|
if (update2.docChanged || update2.viewportChanged || update2.focusChanged || update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) || update2.selectionSet && !options.selectionChangeDelay) {
|
5247
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5292
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(update2.view, options, update2.view.hasFocus));
|
5248
5293
|
this.clearUpdate();
|
5249
5294
|
} else if (update2.selectionSet) {
|
5250
5295
|
this.scheduleUpdate(update2.view);
|
@@ -5270,9 +5315,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5270
5315
|
}
|
5271
5316
|
}, {
|
5272
5317
|
provide: (plugin) => [
|
5273
|
-
|
5274
|
-
|
5275
|
-
|
5318
|
+
EditorView20.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
|
5319
|
+
EditorView20.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
|
5320
|
+
EditorView20.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration8.none)
|
5276
5321
|
]
|
5277
5322
|
}),
|
5278
5323
|
image(),
|
@@ -5283,12 +5328,12 @@ var decorateMarkdown = (options = {}) => {
|
|
5283
5328
|
};
|
5284
5329
|
|
5285
5330
|
// packages/ui/react-ui-editor/src/extensions/markdown/link.ts
|
5286
|
-
import { syntaxTree as
|
5331
|
+
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5287
5332
|
import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
|
5288
5333
|
import { tooltipContent } from "@dxos/react-ui-theme";
|
5289
|
-
var linkTooltip = (
|
5334
|
+
var linkTooltip = (render) => {
|
5290
5335
|
return hoverTooltip2((view, pos, side) => {
|
5291
|
-
const syntax =
|
5336
|
+
const syntax = syntaxTree9(view.state).resolveInner(pos, side);
|
5292
5337
|
let link = null;
|
5293
5338
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
5294
5339
|
link = node.name === "Link" ? node : null;
|
@@ -5301,14 +5346,11 @@ var linkTooltip = (renderTooltip) => {
|
|
5301
5346
|
return {
|
5302
5347
|
pos: link.from,
|
5303
5348
|
end: link.to,
|
5304
|
-
|
5305
|
-
// above: true,
|
5349
|
+
above: true,
|
5306
5350
|
create: () => {
|
5307
5351
|
const el = document.createElement("div");
|
5308
|
-
el.className = tooltipContent({});
|
5309
|
-
|
5310
|
-
url: urlText
|
5311
|
-
}, view);
|
5352
|
+
el.className = tooltipContent({}, "pli-2 plb-1");
|
5353
|
+
render(el, urlText);
|
5312
5354
|
return {
|
5313
5355
|
dom: el,
|
5314
5356
|
offset: {
|
@@ -5318,9 +5360,6 @@ var linkTooltip = (renderTooltip) => {
|
|
5318
5360
|
};
|
5319
5361
|
}
|
5320
5362
|
};
|
5321
|
-
}, {
|
5322
|
-
// NOTE: 0 = default of 300ms.
|
5323
|
-
hoverTime: 1
|
5324
5363
|
});
|
5325
5364
|
};
|
5326
5365
|
|
@@ -5408,165 +5447,6 @@ var InputModeExtensions = {
|
|
5408
5447
|
]
|
5409
5448
|
};
|
5410
5449
|
|
5411
|
-
// packages/ui/react-ui-editor/src/extensions/preview/preview.ts
|
5412
|
-
import "@dxos/lit-ui/dx-ref-tag.pcss";
|
5413
|
-
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5414
|
-
import { RangeSetBuilder as RangeSetBuilder4, StateField as StateField10 } from "@codemirror/state";
|
5415
|
-
import { Decoration as Decoration8, EditorView as EditorView20, WidgetType as WidgetType6 } from "@codemirror/view";
|
5416
|
-
var preview = (options = {}) => {
|
5417
|
-
return [
|
5418
|
-
// NOTE: Atomic block decorations must be created from a state field, now a widget, otherwise it results in the following error:
|
5419
|
-
// "Block decorations may not be specified via plugins"
|
5420
|
-
StateField10.define({
|
5421
|
-
create: (state) => buildDecorations3(state, options),
|
5422
|
-
update: (_, tr) => buildDecorations3(tr.state, options),
|
5423
|
-
provide: (field) => [
|
5424
|
-
EditorView20.decorations.from(field),
|
5425
|
-
EditorView20.atomicRanges.of((view) => view.state.field(field))
|
5426
|
-
]
|
5427
|
-
}),
|
5428
|
-
EditorView20.theme({
|
5429
|
-
".cm-preview-block": {
|
5430
|
-
marginLeft: "-1rem",
|
5431
|
-
marginRight: "-1rem",
|
5432
|
-
padding: "1rem",
|
5433
|
-
borderRadius: "0.5rem",
|
5434
|
-
background: "var(--dx-modalSurface)",
|
5435
|
-
border: "1px solid var(--dx-separator)"
|
5436
|
-
}
|
5437
|
-
})
|
5438
|
-
];
|
5439
|
-
};
|
5440
|
-
var getLinkRef = (state, node) => {
|
5441
|
-
const mark = node.getChild("LinkMark");
|
5442
|
-
const label = node.getChild("LinkLabel");
|
5443
|
-
if (mark && label) {
|
5444
|
-
const ref = state.sliceDoc(label.from + 1, label.to - 1);
|
5445
|
-
return {
|
5446
|
-
suggest: ref.startsWith("?"),
|
5447
|
-
block: state.sliceDoc(mark.from, mark.from + 1) === "!",
|
5448
|
-
label: state.sliceDoc(mark.to, label.from - 1),
|
5449
|
-
ref: ref.startsWith("?") ? ref.slice(1) : ref
|
5450
|
-
};
|
5451
|
-
}
|
5452
|
-
};
|
5453
|
-
var buildDecorations3 = (state, options) => {
|
5454
|
-
const builder = new RangeSetBuilder4();
|
5455
|
-
syntaxTree9(state).iterate({
|
5456
|
-
enter: (node) => {
|
5457
|
-
switch (node.name) {
|
5458
|
-
//
|
5459
|
-
// Decoration.
|
5460
|
-
// [Label][dxn:echo:123]
|
5461
|
-
//
|
5462
|
-
case "Link": {
|
5463
|
-
const link = getLinkRef(state, node.node);
|
5464
|
-
if (link) {
|
5465
|
-
builder.add(node.from, node.to, Decoration8.replace({
|
5466
|
-
widget: new PreviewInlineWidget(options, link)
|
5467
|
-
}));
|
5468
|
-
}
|
5469
|
-
break;
|
5470
|
-
}
|
5471
|
-
//
|
5472
|
-
// Block widget.
|
5473
|
-
// ![Label][dxn:echo:123]
|
5474
|
-
//
|
5475
|
-
case "Image": {
|
5476
|
-
const link = getLinkRef(state, node.node);
|
5477
|
-
if (options.renderBlock && link) {
|
5478
|
-
builder.add(node.from, node.to, Decoration8.replace({
|
5479
|
-
block: true,
|
5480
|
-
// atomic: true,
|
5481
|
-
widget: new PreviewBlockWidget(options, link)
|
5482
|
-
}));
|
5483
|
-
}
|
5484
|
-
break;
|
5485
|
-
}
|
5486
|
-
}
|
5487
|
-
}
|
5488
|
-
});
|
5489
|
-
return builder.finish();
|
5490
|
-
};
|
5491
|
-
var PreviewInlineWidget = class extends WidgetType6 {
|
5492
|
-
constructor(_options, _link) {
|
5493
|
-
super();
|
5494
|
-
this._options = _options;
|
5495
|
-
this._link = _link;
|
5496
|
-
}
|
5497
|
-
// override ignoreEvent() {
|
5498
|
-
// return false;
|
5499
|
-
// }
|
5500
|
-
eq(other) {
|
5501
|
-
return this._link.ref === other._link.ref && this._link.label === other._link.label;
|
5502
|
-
}
|
5503
|
-
toDOM(view) {
|
5504
|
-
const root = document.createElement("dx-ref-tag");
|
5505
|
-
root.textContent = this._link.label;
|
5506
|
-
root.setAttribute("ref", this._link.ref);
|
5507
|
-
return root;
|
5508
|
-
}
|
5509
|
-
};
|
5510
|
-
var PreviewBlockWidget = class extends WidgetType6 {
|
5511
|
-
constructor(_options, _link) {
|
5512
|
-
super();
|
5513
|
-
this._options = _options;
|
5514
|
-
this._link = _link;
|
5515
|
-
}
|
5516
|
-
// override ignoreEvent() {
|
5517
|
-
// return true;
|
5518
|
-
// }
|
5519
|
-
eq(other) {
|
5520
|
-
return this._link.ref === other._link.ref;
|
5521
|
-
}
|
5522
|
-
toDOM(view) {
|
5523
|
-
const root = document.createElement("div");
|
5524
|
-
root.classList.add("cm-preview-block");
|
5525
|
-
const handleAction = (action) => {
|
5526
|
-
const pos = view.posAtDOM(root);
|
5527
|
-
const node = syntaxTree9(view.state).resolve(pos + 1).node.parent;
|
5528
|
-
if (!node) {
|
5529
|
-
return;
|
5530
|
-
}
|
5531
|
-
const link = getLinkRef(view.state, node);
|
5532
|
-
if (link?.ref !== action.link.ref) {
|
5533
|
-
return;
|
5534
|
-
}
|
5535
|
-
switch (action.type) {
|
5536
|
-
// TODO(burdon): Should we dispatch to the view or mutate the document? (i.e., handle externally?)
|
5537
|
-
// Insert ref text.
|
5538
|
-
case "insert": {
|
5539
|
-
view.dispatch({
|
5540
|
-
changes: {
|
5541
|
-
from: node.from,
|
5542
|
-
to: node.to,
|
5543
|
-
insert: action.target.text
|
5544
|
-
}
|
5545
|
-
});
|
5546
|
-
break;
|
5547
|
-
}
|
5548
|
-
// Remove ref.
|
5549
|
-
case "delete": {
|
5550
|
-
view.dispatch({
|
5551
|
-
changes: {
|
5552
|
-
from: node.from,
|
5553
|
-
to: node.to
|
5554
|
-
}
|
5555
|
-
});
|
5556
|
-
break;
|
5557
|
-
}
|
5558
|
-
}
|
5559
|
-
};
|
5560
|
-
this._options.renderBlock(root, {
|
5561
|
-
readonly: view.state.readOnly,
|
5562
|
-
link: this._link,
|
5563
|
-
onAction: handleAction,
|
5564
|
-
onLookup: this._options.onLookup
|
5565
|
-
}, view);
|
5566
|
-
return root;
|
5567
|
-
}
|
5568
|
-
};
|
5569
|
-
|
5570
5450
|
// packages/ui/react-ui-editor/src/extensions/typewriter.ts
|
5571
5451
|
import { keymap as keymap10 } from "@codemirror/view";
|
5572
5452
|
var defaultItems = [
|
@@ -5642,7 +5522,7 @@ import { getProviderValue, isNotFalsy as isNotFalsy4 } from "@dxos/util";
|
|
5642
5522
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
5643
5523
|
var instanceCount = 0;
|
5644
5524
|
var useTextEditor = (props = {}, deps = []) => {
|
5645
|
-
const { id,
|
5525
|
+
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo4(() => getProviderValue(props), deps ?? []);
|
5646
5526
|
const [instanceId] = useState(() => `text-editor-${++instanceCount}`);
|
5647
5527
|
const [view, setView] = useState();
|
5648
5528
|
const parentRef = useRef(null);
|
@@ -5655,7 +5535,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5655
5535
|
doc: initialValue?.length ?? 0
|
5656
5536
|
}, {
|
5657
5537
|
F: __dxlog_file11,
|
5658
|
-
L:
|
5538
|
+
L: 75,
|
5659
5539
|
S: void 0,
|
5660
5540
|
C: (f, a) => f(...a)
|
5661
5541
|
});
|
@@ -5672,7 +5552,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5672
5552
|
};
|
5673
5553
|
}
|
5674
5554
|
const state = EditorState2.create({
|
5675
|
-
doc:
|
5555
|
+
doc: initialValue,
|
5676
5556
|
// selection: initialSelection,
|
5677
5557
|
extensions: [
|
5678
5558
|
id && documentId.of(id),
|
@@ -5681,7 +5561,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5681
5561
|
EditorView21.exceptionSink.of((err) => {
|
5682
5562
|
log7.catch(err, void 0, {
|
5683
5563
|
F: __dxlog_file11,
|
5684
|
-
L:
|
5564
|
+
L: 97,
|
5685
5565
|
S: void 0,
|
5686
5566
|
C: (f, a) => f(...a)
|
5687
5567
|
});
|
@@ -5713,7 +5593,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5713
5593
|
id
|
5714
5594
|
}, {
|
5715
5595
|
F: __dxlog_file11,
|
5716
|
-
L:
|
5596
|
+
L: 134,
|
5717
5597
|
S: void 0,
|
5718
5598
|
C: (f, a) => f(...a)
|
5719
5599
|
});
|
@@ -5730,7 +5610,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5730
5610
|
selection
|
5731
5611
|
}, {
|
5732
5612
|
F: __dxlog_file11,
|
5733
|
-
L:
|
5613
|
+
L: 143,
|
5734
5614
|
S: void 0,
|
5735
5615
|
C: (f, a) => f(...a)
|
5736
5616
|
});
|
@@ -5812,10 +5692,7 @@ export {
|
|
5812
5692
|
blast,
|
5813
5693
|
callbackWrapper,
|
5814
5694
|
clientRectsFor,
|
5815
|
-
closeCommand,
|
5816
|
-
closeEffect,
|
5817
5695
|
command,
|
5818
|
-
commandKeyBindings,
|
5819
5696
|
comments,
|
5820
5697
|
commentsState,
|
5821
5698
|
convertTreeToJson,
|
@@ -5829,7 +5706,6 @@ export {
|
|
5829
5706
|
createElement,
|
5830
5707
|
createExternalCommentSync,
|
5831
5708
|
createMarkdownExtensions,
|
5832
|
-
createRenderer,
|
5833
5709
|
createThemeExtensions,
|
5834
5710
|
debugDispatcher,
|
5835
5711
|
debugNodeLogger,
|
@@ -5843,7 +5719,6 @@ export {
|
|
5843
5719
|
editorGutter,
|
5844
5720
|
editorInputMode,
|
5845
5721
|
editorMonospace,
|
5846
|
-
editorWidth,
|
5847
5722
|
editorWithToolbarLayout,
|
5848
5723
|
flattenRect,
|
5849
5724
|
focus,
|
@@ -5862,11 +5737,8 @@ export {
|
|
5862
5737
|
markdownTags,
|
5863
5738
|
markdownTagsExtensions,
|
5864
5739
|
mention,
|
5865
|
-
openCommand,
|
5866
|
-
openEffect,
|
5867
5740
|
overlap,
|
5868
5741
|
preventNewline,
|
5869
|
-
preview,
|
5870
5742
|
processEditorPayload,
|
5871
5743
|
removeBlockquote,
|
5872
5744
|
removeCodeblock,
|
@@ -5884,7 +5756,7 @@ export {
|
|
5884
5756
|
setStyle,
|
5885
5757
|
singleValueFacet,
|
5886
5758
|
stackItemContentEditorClassNames,
|
5887
|
-
stackItemContentToolbarClassNames,
|
5759
|
+
stackItemContentToolbarClassNames2 as stackItemContentToolbarClassNames,
|
5888
5760
|
table,
|
5889
5761
|
tags2 as tags,
|
5890
5762
|
textRange,
|